
<link href="__ADMIN__/css/font-awesome.min.css" rel="stylesheet" type="text/css">
<link href="__ADMIN__/css/page.css?v=1.0.4" rel="stylesheet" type="text/css">

<style>.skin-black .sidebar a {color: #1c5672;}pre{padding: 20px}</style>

<div id="j_taskcenter" class="main">
 <div class="j_mainscroll mCus-mh100 scrollwrapper mCustomScrollbar _mCS_11 mCS_no_scrollbar">
  <div class="mCustomScrollBox mCS-darkblue mCSB_vertical mCSB_inside" id="mCSB_11" tabindex="0">
   <div dir="ltr" style="position:relative; top:0; left:0;" class="mCSB_container mCS_y_hidden mCS_no_scrollbar_y" id="mCSB_11_container">
    <div class="main-bd sidebar-in j_sidebarPren">
     <div class="table-tray scrollwrapper">
      <div class="main-content">


<div id="main" class="fix-sidebar">
    <div class="sidebar">
        <div class="sidebar-inner">
            <div class="list">
                <a class="become-backer">拽写人：小黄牛</a>
                <ul class="menu-root">
                    <li>
                        <a class="sidebar-link current">使用说明</a>
                        <ul class="menu-sub">
                            <li> <a class="section-link">后台PHP用法：</a></li>
                            <ul>
                                <li><a class="section-link" href="#jun-创建管理员">1、创建管理员</a></li>
                                <li><a class="section-link" href="#jun-模板中如何进行权限判断">2、模板中如何进行权限判断</a></li>
                                <li><a class="section-link" href="#jun-数据库管理">3、数据库管理</a></li>
                                <li><a class="section-link" href="#jun-添加操作日志记录">4、添加操作日志记录</a></li>
                                <li><a class="section-link" href="#jun-验证当前管理员地区权限">5、验证当前管理员地区权限</a></li>
                                <li><a class="section-link" href="#jun-获取当前管理员地区权限列表">6、获取当前管理员地区权限列表</a></li>
                                <li><a class="section-link" href="#jun-调用短信发送接口">7、调用短信发送接口</a></li>
                                <li><a class="section-link" href="#jun-调用邮件发送接口">8、调用邮件发送接口</a></li>
                                <li><a class="section-link" href="#jun-七牛云OSS存储接口">9、七牛云OSS存储接口</a></li>
                                <ul>
                                    <li><a class="section-link" href="#jun-获取文件大小限制">1、获取文件大小限制</a></li>
                                    <li><a class="section-link" href="#jun-获取文件类型限制">2、获取文件类型限制</a></li>
                                    <li><a class="section-link" href="#jun-是否开启七牛云存储">3、是否开启七牛云存储</a></li>
                                    <li><a class="section-link" href="#jun-是否开启图片压缩">4、是否开启图片压缩</a></li>
                                    <li><a class="section-link" href="#jun-压缩图片">5、压缩图片</a></li>
                                    <li><a class="section-link" href="#jun-七牛云：上传文件">6、七牛云：上传文件</a></li>
                                    <li><a class="section-link" href="#jun-七牛云：删除文件">7、七牛云：删除文件</a></li>
                                </ul>
                                <li><a class="section-link" href="#jun-微信开发接口">10、微信开发接口</a></li>
                                <ul>
                                    <li><a class="section-link" href="#jun-Token认证">1、Token认证</a></li>
                                    <li><a class="section-link" href="#jun-自动文本回复">2、自动文本回复</a></li>
                                    <li><a class="section-link" href="#jun-更新自定义菜单">3、更新自定义菜单</a></li>
                                    <li><a class="section-link" href="#jun-拉取自定义菜单">4、拉取自定义菜单</a></li>
                                    <li><a class="section-link" href="#jun-删除自定义菜单">5、删除自定义菜单</a></li>
                                    <li><a class="section-link" href="#jun-写入日志">6、写入日志</a></li>
                                    <li><a class="section-link" href="#jun-自定义开发">7、自定义开发</a></li>
                                    <li><a class="section-link" href="#jun-创建二维码">8、创建二维码</a></li>
                                    <li><a class="section-link" href="#jun-长连接转换">9、长连接转换</a></li>
                                    <li><a class="section-link" href="#jun-更改行业信息">10、更改行业信息</a></li>
                                    <li><a class="section-link" href="#jun-获得模板ID">11、获得模板ID</a></li>
                                    <li><a class="section-link" href="#jun-发送消息模板">12、发送消息模板</a></li>
                                    <li><a class="section-link" href="#jun-生成网页登录授权链接">13、生成网页登录授权链接</a></li>
                                    <li><a class="section-link" href="#jun-根据code去获取特殊access_token">14、根据code去获取特殊access_token</a></li>
                                    <li><a class="section-link" href="#jun-根据凭据，更新特殊access_token">15、根据凭据，更新特殊access_token</a></li>
                                    <li><a class="section-link" href="#jun-获取用户信息">16、获取用户信息</a></li>
                                    <li><a class="section-link" href="#jun-完整的登录案例代码(控制器中的代码)">17、完整的登录案例代码(控制器中的代码)</a></li>
                                    <li><a class="section-link" href="#jun-获取用户列表">18、获取用户列表</a></li>
                                    <li><a class="section-link" href="#jun-设置用户的备注名">19、设置用户的备注名</a></li>
                                    <li><a class="section-link" href="#jun-JSAPI支付">20、JSAPI支付</a></li>
                                    <li><a class="section-link" href="#jun-二维码支付：模式一">21、二维码支付：模式一</a></li>
                                    <li><a class="section-link" href="#jun-二维码支付：模式二">22、二维码支付：模式二</a></li>
                                    <li><a class="section-link" href="#jun-查询微信支付订单">23、查询订单</a></li>
                                    <li><a class="section-link" href="#jun-微信支付订单申请退款">24、申请退款</a></li>
                                    <li><a class="section-link" href="#jun-微信订单退款查询">25、查询退款</a></li>
                                    <li><a class="section-link" href="#jun-下载微信支付对账单">26、下载微信支付对账单</a></li>
                                    
                                </ul>
                                <li><a class="section-link" href="#jun-微信浏览器检测域名屏蔽">11、微信浏览器检测域名屏蔽</a></li>
                                <li><a class="section-link" href="#jun-免费快递查询">12、免费快递查询</a></li>
                                <li><a class="section-link" href="#jun-网站收录量查询">13、网站收录量查询</a></li>
                                <li><a class="section-link" href="#jun-CMD工具命令扩展">14、CMD工具命令扩展</a></li>
                                <li><a class="section-link" href="#jun-聚合登录接口">15、聚合登录接口</a></li>
                                <li><a class="section-link" href="#jun-百度翻译接口">16、百度翻译接口</a></li>
                                <li><a class="section-link" href="#jun-手机归属地查询接口">17、手机归属地查询接口</a></li>
                                <li><a class="section-link" href="#jun-居民身份证真实性查询接口">18、居民身份证真实性查询接口</a></li>
                                <li><a class="section-link" href="#jun-密码表简单加解密">19、密码表简单加解密</a></li>
                                <li><a class="section-link" href="#jun-IP省市区地址查询">20、IP省市区地址查询</a></li>
                                <li><a class="section-link" href="#jun-文件压缩解压">21、文件压缩解压</a></li>
                            </ul>

                            <li> <a class="section-link">&nbsp;</a></li>
                            <li> <a class="section-link">公关函数库：</a></li>
                            <ul>
                                <li><a class="section-link" href="#jun-过滤敏感词">1、过滤敏感词</a></li>
                            </ul>

                            <li> <a class="section-link">&nbsp;</a></li>
                            <li> <a class="section-link">后台JS用法：</a></li>
                            <ul>
                                <li><a class="section-link" href="#jun-弹窗提示">1、弹窗提示</a></li>
                                <li><a class="section-link" href="#jun-新窗口弹出页面">2、新窗口弹出页面</a></li>
                            </ul>
                            
                            <li> <a class="section-link" href="#jun-更新日程">更新日程</a></li>
                            <li> <a class="section-link" href="#jun-注意事项">注意事项</a></li>
                            <li> <a class="section-link" href="#jun-文件以及目录说明">文件以及目录说明</a></li>
                        </ul>
                    </li>
                </ul>
            </div>
        </div>
    </div>
    <div class="content guide with-sidebar index-guide">
        <h1>后端 - 后台开发文档</h1>


        <h2 id="jun-创建管理员">1、创建管理员</h2>
        <p>A、添加对应的菜单列表</p>
        <p>B、创建需要的部门，例如：技术部、司机部等</p>
        <p>C、创建需要分配权限菜单的角色</p>
        <p>D、创建需要的岗位，例如：技术部经理、实习生等，一个岗位可关联多个角色</p>
        <p>E、创建管理员，系统最多只能同时存在3个超级管理员</p>

        <h2 id="jun-模板中如何进行权限判断">2、模板中如何进行权限判断</h2>
        <p>在模板文件中，使用下列方式即可判断权限显示对应的菜单：</p>
        <p><code>{literal}{if condition="$adminController->vif('控制器','方法')"} {/if}{/literal}</code></p>


        <h2 id="jun-数据库管理">3、数据库管理</h2>
        <p>出于安全考虑，当前系统只支持<code>数据库表详情查看</code>功能</p>

        <h2 id="jun-添加操作日志记录">4、添加操作日志记录</h2>
        <p>在控制器中使用<code>$this->addLog();</code>添加操作日志，参数如下：</p>
<p><pre>
/**
* 记录操作日志
 * @param string $type   操作类型
 * @param string $title  详细描述
 * @param int    $status 操作状态 1|2|3 成功|失败|异常
 * @param bool   $model  是否需要重定向回上一页
 * @return 无
*/
public function addLog($type, $title, $status, $model=true){

}
</pre></p>


        <h2 id="jun-验证当前管理员地区权限">5、验证当前管理员地区权限</h2>
        <p>在控制器中使用<code>$this->regionVif();</code>验证地区权限，参数如下：</p>
<p><pre>
/**
 * 验证是否拥有地区访问权限
 * @param int $id 地区ID
 * @return bool
*/
public function regionVif($id = ''){

}
</pre></p>


        <h2 id="jun-获取当前管理员地区权限列表">6、获取当前管理员地区权限列表</h2>
        <p>在控制器中使用<code>$this->regionGet();</code>拉取地区权限，该方法不需要传参：</p>
<p><pre>
/**
 * 拉取地区访问权限
 * @return bool|string
*/
public function regionGet(){

}
</pre></p>


        <h2 id="jun-调用短信发送接口">7、调用短信发送接口</h2>
        <p>在控制器中使用<code>\sms\Sms::run(手机号, 短信内容)</code>发送短信，该方法需要传参：</p>
<p><pre>
/**
 * 调用发送接口
 * @param string $phone 接收短信手机号集合,多个用逗号分隔
 * @param mixed $param 短信变量内容，就是你短信模板里的{}，多个用,逗号隔开
 * @return string|bool
*/
public static function run($phone, $param) {

}
当返回值为true时，表示发送成功
当返回值为string时，为发送失败的原因
当返回值为false时，表示后台关闭了发送短信设置
</pre></p>


        <h2 id="jun-调用邮件发送接口">8、调用邮件发送接口</h2>
        <p>在控制器中使用<code>\email\Email::run(邮箱, 邮件标题, 邮件内容)</code>发送邮件，该方法需要传参：</p>
<p><pre>
/**
 * 发送邮件
 * @param string $email 邮件人邮箱，多个使用,逗号隔开
 * @param string $title 邮件标题
 * @param string $html 邮件内容
 * @return string|bool
*/
public static function run($email, $title, $html) {

}
当返回值为true时，表示发送成功
当返回值为string时，为发送失败的原因
</pre></p>

        <h2 id="jun-七牛云OSS存储接口">9、七牛云OSS存储接口</h2>
        <p>七牛云相关接口，是一整套图片相关操作的SDK，可以组合成自己想要的功能：</p>

        <h3 id="jun-获取文件大小限制">1、获取文件大小限制</h3>
        <p>在控制器中直接使用<code>\qiniu\Qiniu::get_size()</code>：</p>
<p><pre>
/**
 * 获得限制大小
 * @return int
*/
public static function get_size(){

}
返回值为字节数
</pre></p>        

        <h3 id="jun-获取文件类型限制">2、获取文件类型限制</h3>
        <p>在控制器中直接使用<code>\qiniu\Qiniu::get_type()</code>：</p>
<p><pre>
/**
 * 获得限制类型
 * @return string
*/
public static function get_type(){
    
}
返回值为后台设置的限制类型
</pre></p>  

        <h3 id="jun-是否开启七牛云存储">3、是否开启七牛云存储</h3>
        <p>在控制器中直接使用<code>\qiniu\Qiniu::get_status()</code>：</p>
<p><pre>
/**
 * 获得开启状态
 * @return int
*/
public static function get_status(){

}
返回值0，关闭
返回值1，开启
</pre></p>  

        <h3 id="jun-是否开启图片压缩">4、是否开启图片压缩</h3>
        <p>在控制器中直接使用<code>\qiniu\Qiniu::get_zip()</code>：</p>
<p><pre>
/**
 * 获得压缩状态
 * @return int
*/
public static function get_zip(){

}
返回值0，关闭
返回值1，开启
</pre></p> 


        <h3 id="jun-压缩图片">5、压缩图片</h3>
        <p>在控制器中使用<code>\qiniu\Qiniu::image_png_size_add(图片路径, 压缩后保存路径)</code>进行图片压缩，该方法需要传参：</p>
<p><pre>
/**
 * 压缩本地图片
 * @param string $imgsrc 图片路径  
 * @param string $imgdst 压缩后保存路径  
 * @return void
*/
public static function image_png_size_add($imgsrc,$imgdst){  

}
没有返回值
</pre></p> 

        <h3 id="jun-七牛云：上传文件">6、七牛云：上传文件</h3>
        <p>在控制器中使用<code>\qiniu\Qiniu::put(图片路径, 七牛云保存的文件名)</code>进行七牛云文件上传，该方法需要传参：</p>
<p><pre>
/**
 * 上传七牛云图片
 * @param string $filePath 要上传文件的本地路径
 * @param string $key 上传到七牛后保存的文件名
 * @return string|bool
*/
public static function put($filePath, $key){

}
当返回值为true时，表示删除成功
当返回值为false时，发送失败或后台已经关闭七牛云启用设置
</pre></p> 

        <h3 id="jun-七牛云：删除文件">7、七牛云：删除文件</h3>
        <p>在控制器中使用<code>\qiniu\Qiniu::delete(图片路径)</code>进行七牛云文件删除，该方法需要传参：</p>
<p><pre>
/**
 * 删除七牛云图片
 * @param string $filePath 图片地址
 * @return bool
*/
public static function delete($filePath){

}
当返回值为true时，表示删除成功
当返回值为false时，发送失败或后台已经关闭七牛云启用设置
</pre></p> 


        <h2 id="jun-微信开发接口">10、微信开发接口</h2>
        <p>JunAMS基于官方SDK封装了一套微信开发的相关接口，可以直接使用官方提供的功能，也可以自定义组合成自己想要的功能：</p>
        <p>在使用微信开发API前，请先到API参数管理中设置相关参数，再进行调用。</p>

        <h3 id="jun-Token认证">1、Token认证</h3>
        <p>官方提供了的默认认证地址为<code>/admin.php/common/token_vif</code>，如果你想自定义认证，也可以调用<code>\weixin\Weixin::token_vif()</code>，该方法返回<code>bool</code>值。</p>

        <h3 id="jun-自动文本回复">2、自动文本回复</h3>
        <p>官方提供了的默认的自动回复功能，但只支持文本回复，程序处理地址为<code>/admin.php/common/token_vif</code>，如果你想自定义认证，也可以调用<code>\weixin\Weixin</code>类里的方法进行组合开发。</p>
        <p>注意：默认情况下，官方的自动回复功能是关闭的，需要在API参数管理中进行开启。</p>

        <h3 id="jun-更新自定义菜单">3、更新自定义菜单</h3>
        <p>官方提供了的默认的菜单更新功能，在API参数管理中可以进行点击更新，如果你想自定义菜单更新功能，可以调用<code>\weixin\Weixin::save_menu()</code>方法，该方法成功返回<code>true</code>，失败返回错误原因。</p>
        <p>注意：该方法读取的是<code>config</code>表中的<code>weixin_menu</code>字段内容进行菜单更新，所以在自定义调用前，请先更新表中的字段内容。</p>

        <h3 id="jun-拉取自定义菜单">4、拉取自定义菜单</h3>
        <p>官方提供了的默认的菜单拉取功能，在API参数管理中可以进行点击拉取，如果你想自定义菜单拉取功能，可以调用<code>\weixin\Weixin::get_menu()</code>方法，该方法成功返回菜单JSON，失败返回<code>{}</code>。</p>

        <h3 id="jun-删除自定义菜单">5、删除自定义菜单</h3>
        <p>官方提供了的默认的菜单删除功能，在API参数管理中可以进行点击删除，如果你想自定义菜单删除功能，可以调用<code>\weixin\Weixin::delete_menu()</code>方法，该方法返回<code>bool</code>值。</p>

        <h3 id="jun-写入日志">6、写入日志</h3>
        <p>调用<code>\weixin\Weixin::add_log( 一个一维数组自定义内容，是否记录系统错误信息)</code>写入微信日志文件，该方法传参比较特殊，例如：。</p>
<p><pre>
\weixin\Weixin::add_log([
    '微信认证处理',
    '加密签名'=>$signature,
    '时间戳'=>$timestamp,
    '随机数'=>$nonce,
    '随机字符串'=>$echoStr,
], true);
</pre></p>
        <p>注意：默认情况下，日志文件是追加记录方式，如果需要切换日志模式，可以在API参数管理中进行设置。</p>
        
        <h3 id="jun-自定义开发">7、自定义开发</h3>
        <p>JunAMS提供了强大便捷的微信API类库，如果需要自定义功能的开发者们，可以参考<code>/extend/weixin/Weixin.php</code>类文件中的各个方法，再灵活组合使用。</p>


        <h3 id="jun-创建二维码">8、创建二维码</h3>
        <p>调用方法为<code>\weixin\Weixin::get_qrcode(二维码参数, 二维码的类型)</code>，该方法返回获取二维码的URL，直接放入src中即可。</p>
<p><pre>
/**
* 创建微信二维码
* @todo 注意：不是支付二维码
* @param string $val 二维码参数
* @param mixed $type 二维码的类型  1|2|3  =  临时|永久|永久的字符串参数值
* @return string 二维码的url
*/
public static function get_qrcode($val, $type = 1) {

}
</pre></p>

        <h3 id="jun-长连接转换">9、长连接转换</h3>
        <p>调用方法为<code>\weixin\Weixin::get_shorturl(链接地址)</code>，该方法返回<Code>false</Code>为失败，成功返回短连接。</p>
<p><pre>
/**
* 长链接转短链接接口
* @todo 无
* @param string $long_url 长链接转短链接
* @return string|bool
*/
public static function get_shorturl($long_url) {

}
</pre></p>

        <h3 id="jun-更改行业信息">10、更改行业信息</h3>
        <p>调用方法为<code>\weixin\Weixin::save_industry(所属行业编码1, 所属行业编码2)</code>，该方法成功返回<code>true</code>，失败返回微信msg。</p>
<p><pre>
/**
* 更改行业信息
* @todo 无
* @param string $str_1 所属行业编码
* @param mixed $str_2 所属行业编码
* @return string|bool
*/
public static function save_industry($str_1=1, $str_2=2){

}
</pre></p>

        <h3 id="jun-获得模板ID">11、获得模板ID</h3>
        <p>调用方法为<code>\weixin\Weixin::get_template(模板库中模板的编号)</code>，该方法成功返回模板ID，失败返回<code>false</code>。</p>
<p><pre>
/**
* 获得模板ID
* @todo 无
* @param string $mid 模板库中模板的编号
* @return string|bool
*/
public static function get_template($mid) {

}
</pre></p>


        <h3 id="jun-发送消息模板">12、发送消息模板</h3>
        <p>调用方法为<code>\weixin\Weixin::send_msg(用户的微信ID, 模板ID, 点击跳转到的详情地址, 模板消息内容)</code>，该方法成功返回微信<Code>msgid</Code>，失败返回<code>false</code>。</p>
<p><pre>
/**
* 发送消息模板
* @todo 无
* @param string $open_id 用户的微信ID
* @param string $mid get_template()返回的模板ID
* @param string $url 模板消息中，需要点击跳转到的详情地址
* @param json  $data 模板消息内容，具体格式参考微信开发文档
* @return string|bool
*/
public static function send_msg($open_id, $mid, $url, $data){

}
</pre></p>

        <h3 id="jun-生成网页登录授权链接">13、生成网页登录授权链接</h3>
        <p>调用方法为<code>\weixin\Weixin::wx_login(回调地址，附加自定义参数不能为空)</code>，该方法成功返回一个URL地址，用于重定向微信授权。</p>
<p><pre>
/**
* 生成网页登录授权链接
* @todo 无
* @param string $url 授权后重定向的回调链接地址
* @param string $state 自己定义的参数，具体看微信开发手册
* @return string
*/
public static function wx_login($url, $state=1){

}
</pre></p>

        <h3 id="jun-根据code去获取特殊access_token">14、根据code去获取特殊access_token</h3>
        <p>调用方法为<code>\weixin\Weixin::get_code_token(授权后返回的code参数默认自动获取)</code>，该方法成功返回一维数组，失败返回<code>false</code>。</p>
<p><pre>
/**
* 根据code去获取特殊access_token
* @todo 无
* @param string $code 授权后返回的code参数
* @return array|bool
*/
public static function get_code_token($code=''){

}
</pre></p>

        <h3 id="jun-根据凭据，更新特殊access_token">15、根据凭据，更新特殊access_token</h3>
        <p>调用方法为<code>\weixin\Weixin::save_code_token(更新凭据)</code>，该方法成功返回一维数组，失败返回<code>false</code>。</p>
<p><pre>
/**
* 根据凭据，更新特殊access_token
* @todo 注意，在get_code_token()中并没有返回refresh_token参数，所以需要自行修改代码获取
* @param string $refresh_token 在get_code_token()中的更新凭据
* @return array|bool
*/
public static function save_code_token($refresh_token){

}
</pre></p>


        <h3 id="jun-获取用户信息">16、获取用户信息</h3>
        <p>调用方法为<code>\weixin\Weixin::get_user(特殊access_token, 微信OpenID)</code>，该方法成功返回一维数组，失败返回<code>false</code>。</p>
<p><pre>
/**
* 获取用户信息
* @todo 无
* @param string $token 特殊access_token
* @param string $open_id 用户的OpenId
* @return array|bool 微信用户的基本信息
*/
public static function get_user($token, $open_id){

}
</pre></p>

        <h3 id="jun-完整的登录案例代码(控制器中的代码)">17、完整的登录案例代码(控制器中的代码)</h3>
<p><pre>
# 以下为控制器中的测试方法
public function test(){
    # 生成跳转链接 - 使用生成的链接放到微信浏览器中跳转
    dump(\weixin\Weixin::wx_login('http://tim.junphp.com/admin.php/common/test2'));
}
public function test2(){
    # 获取token
    $token = \weixin\Weixin::get_code_token();
    # 获取用户信息
    dump(\weixin\Weixin::get_user($token['access_token'], $token['openid']));
}
</pre></p>


        <h3 id="jun-获取用户列表">18、获取用户列表</h3>
        <p>调用方法为<code>\weixin\Weixin::get_user_list(第一个拉取的微信OpenID)</code>，该方法成功返回多维数组，失败返回<code>false</code>。</p>
<p><pre>
/**
* 获取用户列表
* @todo 无
* @param string $open_id 第一个拉取的OPENID，不填默认从头开始拉取
* @return array|bool
*/
public static function get_user_list($open_id=null) {

}
</pre></p>

        <h3 id="jun-设置用户的备注名">19、设置用户的备注名</h3>
        <p>调用方法为<code>\weixin\Weixin::save_remark(微信OpenID, 设置的备注名)</code>，该方法成功返回<code>true</code>，失败返回<code>false</code>。</p>
<p><pre>
/**
* 设置用户的备注名
* @todo 无
* @param string $open_id 用户的OpenId
* @param string $remark 设置的备注名
* @return bool
*/
public static function save_remark($open_id, $remark) {

}
</pre></p>


        <h3 id="jun-JSAPI支付">20、JSAPI支付</h3>
        <p>微信的JSAPI支付需要依赖3个接口，才能成功挑起，分别为：统一下单、生成JS支付参数、生成收货地址JS参数，具体的使用方法如下：</p>
<p><pre>
$order = \weixin\Weixin::jsapi(
    '我是商品描述',
    '我是附加信息',
    '100.15'
);
dump($order);
# 将这个给JS发起支付
$jsApiParameters = \weixin\Weixin::GetJsApiParameters($order);
dump($jsApiParameters);

# 获取共享收货地址js函数参数
$editAddress = \weixin\Weixin::GetEditAddressParameters();
dump($editAddress);

# 注意如果提示url参数错误，请检查后台API参数设置，与微信支付平台域名、目录绑定等设置是否有错。

/**
* 生成JSAPI需要的json参数
* @todo 无
* @param string $Body 商品描述
* @param string $attach 附加数据
* @param string $total_fee 商品金额，单位是：分
* @param string $trade_no 商品订单号，要具有唯一性，默认是时间戳
* @param string $goods_tag 商品代金券说明
* @return void JSAPI需要的参数
*/
public static function jsapi($body, $attach, $total_fee, $trade_no=null, $goods_tag='no'){
    # 注意如果$trade_no为空，则使用当前时间戳
}
</pre></p>

        <h3 id="jun-二维码支付：模式一">21、二维码支付：模式一</h3>
        <p>调用方法为<code>\weixin\Weixin::qrpay_1(商品ID)</code>，该方法成功返回一段二维码URL，失败弹出错误报告。注意：获得url后，要使用<code>\weixin\Weixin::qrcode(支付URL)</code>生成二维码。</p>
<p><pre>
/**
* 微信二维码支付：模式一
* @todo 注意：二维码要使用Weixin::qrcode()生成
* @param string $productId 商品ID
* @return string 返回二维码链接
*/
public static function qrpay_1($productId) {

}

# 案例如下：
\weixin\Weixin::qrcode(\weixin\Weixin::qrpay_1("123456789"));
</pre></p>

        <h3 id="jun-二维码支付：模式二">22、二维码支付：模式二</h3>
        <p>调用方法为<code>\weixin\Weixin::qrpay_2(与JSAPI支付参数一致)</code>，该方法成功返回一段二维码URL，失败则返回<code>false</code>。注意：获得url后，要使用<code>\weixin\Weixin::qrcode(支付URL)</code>生成二维码。</p>
<p><pre>
/**
* 微信二维码支付：模式二
* @todo 注意：二维码要使用Weixin::qrcode()生成
* @param string $Body 商品描述
* @param string $attach 附加数据
* @param string $total_fee 商品金额，单位是：分
* @param string $product_id 商品ID
* @param string $trade_no 商品订单号，要具有唯一性，默认是时间戳
* @param string $goods_tag 商品代金券说明
* @return string|bool 返回二维码链接
*/
public static function qrpay_2($body, $attach, $total_fee, $product_id, $trade_no=null, $goods_tag='no'){

}

# 案例如下：
\weixin\Weixin::qrcode(\weixin\Weixin::qrpay_2(
    '我是商品描述',
    '我是附加信息',
    '100.15',
    "123456789"
));
</pre></p>

        <h3 id="jun-查询微信支付订单">23、查询订单</h3>
        <p>调用方法为<code>\weixin\Weixin::get_wx_order(微信系统订单号，商户自定义单号)</code>。</p>
<p><pre>
/**
* 查询微信支付订单
* @todo 无
* @param string $transaction_id 微信系统订单号
* @param string $out_trade_no 商户自定义单号
* @return void 查询到的订单信息
*/
public static function get_wx_order($transaction_id='', $out_trade_no=''){

}

# 注意，由于微信支付过期了，该方法还没验证是否无错
</pre></p>


        <h3 id="jun-微信支付订单申请退款">24、申请退款</h3>
        <p>调用方法为<code>\weixin\Weixin::out_wx_order(订单总金额, 退款金额, 微信系统订单号, 商户自定义单号)</code>。</p>
<p><pre>
/**
* 微信支付订单申请退款
* @todo 退款金额不能大于订单总额，如果调用时出现CURL错误，请参考这个网址进行解决： http://blog.csdn.net/Hiking_Tsang/article/details/52667781
* @param string $total_fee 订单总金额
* @param string $refund_fee 退款金额
* @param string $transaction_id 微信系统订单号 二选一 优先
* @param string $out_trade_no 商户自定义单号 二选一 次级
* @return void 退款返回值
*/
public function out_wx_order($total_fee, $refund_fee, $transaction_id='', $out_trade_no=''){

}

# 注意，由于微信支付过期了，该方法还没验证是否无错
</pre></p>

        <h3 id="jun-微信订单退款查询">25、查询退款</h3>
        <p>调用方法为<code>\weixin\Weixin::get_out_wx_order(微信退款单号, 微信系统订单号, 商户自定义单号, 商户退款单号)</code>。</p>
<p><pre>
/**
* 微信支付订单退款查询
* @todo 四个参数只需要填写一个，其余为空即可
* @param string $refund_id 微信退款单号 一级
* @param string $transaction_id 微信系统订单号 二级
* @param string $out_trade_no 商户自定义单号 三级
* @param string $out_refund_no 商户退款单号 四级
* @return void 查询返回值 $data['result_code'] SUCCESS 申请成功
*              退款状态： $data['refund_status_$n'] $n一般为0 ，SUCCESS|FAIL|PROCESSING|CHANGE    退款成功|退款失败|退款处理中|转入代发
*              CHANGE|转入代发 退款到银行发现用户的卡作废或者冻结了，导致原路退款银行卡失败，资金回流到商户的现金帐号，需要商户人工干预，通过线下或者财付通转账的方式进行退款。
*/
public function get_out_wx_order($refund_id='', $transaction_id='', $out_trade_no='', $out_refund_no=''){

}

# 注意，由于微信支付过期了，该方法还没验证是否无错
</pre></p>

        <h3 id="jun-下载微信支付对账单">26、下载微信支付对账单</h3>
        <p>调用方法为<code>\weixin\Weixin::download_order(对账单日期时间, 对账单类型)</code>。</p>
<p><pre>
/**
* 下载微信支付对账单
* @todo 无
* @param string $time 对账单日期时间：精确到日 20170227
* @param string $type 对账单类型：ALL|SUCCESS|REFUND|REVOKED 所有订单|成功支付订单|退款订单|撤销订单
* @return array 一个三维数组，top是table的表题值，body是内容值
*/
public function download_order($time, $type='ALL'){

}

# 注意，由于微信支付过期了，该方法还没验证是否无错
</pre></p>




        <h2 id="jun-微信浏览器检测域名屏蔽">11、微信浏览器检测域名屏蔽</h2>
        <p>
            调用<code>\org\Iswx::run(域名)</code>进行屏蔽检测，未屏蔽返回<code>true</code>，已被屏蔽返回<code>false</code>。
        </p>

        <h2 id="jun-免费快递查询">12、免费快递查询</h2>
        <p>
            调用<code>/kuaidi/Express::run(快递单号，中文快递公司)</code>进行快递查询。<br/>
            注意1：不填快递公司时，将自动识别快递公司。<br/>
            注意2：默认情况下，快递接口使用权限是关闭的，请到API参数管理中进行开启设置。<br/>
            注意3：该方法返回的是一个多维数组或者<code>false</code>，例如：<br/>
            返回值为<code>false</code>时，系统关闭了快递接口的使用权限。<br/>
            code为 <code>00</code>时，查询成功，快递流程在data中<br/>
            code为 <code>01</code>时，快递单号为空<br/>
            code为 <code>02</code>时，快递公司自动识别失败，单号可能已过期<br/>
            code为 <code>03</code>时，暂无该快递公司类型，或者查询失败<br/>
            code为 <code>04</code>时，快递接口调用出错，msg中是接口官方的提示内容
        </p>

        <h2 id="jun-网站收录量查询">13、网站收录量查询</h2>
        <p>
            调用<code>\org\Indexes::run(服务商编码，网址)</code>进行收录量查询。<br/>
            注意1：当前API只支持3家服务商，编码为：baidu、360、sougou。<br/>
            注意2：该方法返回的是个一维数组，例如：<br/>
            code为 <code>00</code>时，查询成功，收录量在data中<br/>
            code为 <code>01</code>时，查询类型为空<br/>
            code为 <code>02</code>时，查询网址为空<br/>
            code为 <code>03</code>时，暂无该查询类型
        </p>

        <h2 id="jun-CMD工具命令扩展">14、CMD工具命令扩展</h2>
        <p>
            我们需要在后台<code>Cmd.php</code>控制器的<code>run()</code>方法中先加入对应的指令分流处理，<br/>
            然后再将对应的指令封装到<code>/extend/cmd/</code>文件夹中，规范为一组指令为一个文件，该文件需要继承<code>Common.php</code>基类。<br/>
            <br/>
            <code>self::json('02', '内容');</code>表示返回单条记录。
            <br/><br/>
            <code>$data[] = '第一条';</code><br/>
            <code>$data[] = '第二条';</code><br/>
            <code>self::json('00', $data);</code>表示返回多条记录。
        </p>

        <h2 id="jun-聚合登录接口">15、聚合登录接口</h2>
        <p>在使用聚合登录API前，请先到API参数管理中设置相关参数，再进行调用。</p>
        <p>
            当前聚合登录暂只支持以下4种登录方式：<br/>
            1、神牛教<br/>
            2、百度<br/>
            3、微博<br/>
            4、github<br/><br/>

            登录跳转授权，使用<br/>
            <code>\oauth2\Oauth2::run('神牛教');</code><br/>
            这样的调用方式，授权回调地址为统一监听，可以在API参数中设置。<br/><br/>

            在回调的统一地址中，我们需要以下代码监听获取到的第三方用户信息：<br/>
            <code>$data = \oauth2\Oauth2::monitor();</code><br/>
            该方法若获取失败统一返回 false，否则返回用户信息，结构如下：
        </p>
<pre>[
        'user_id'  => '用户ID',
        'name'     => '用户名',
        'nick'     => '用户昵称',
        'sex'      => '性别 0 未知 1男 2女',
        'portrait' => '头像地址',
        'type'     => '第三方类型',
]</pre>
        <p>
            第三方类型码有如下：<br/>
            git 对应 github<br/>
            snj 对应 神牛教<br/>
            bd  对应 百度<br/>
            wb  对应 微博
        </p>

        <h2 id="jun-百度翻译接口">16、百度翻译接口</h2>
        <p>该接口主要以CURL爬虫实现，无需百度官方key支持，依赖<code>\org\Fanyi::run(翻译内容, 目标语言)</code>方法支持。翻译失败返回<code>false</code>，成功返回一个数组。具体使用案例如下：</p>
<pre>
// 翻译内容为一维数组
$array = [
    '这是一条测试语句，',
    '这是第二条测试语。',
];
// 目标语言为中文字符串，类内部自动识别转换，你也可以自己输入百度的编码，例如zh、en
$list = \org\Fanyi::run($array, '英语');
// 翻译结果是个多维数组，转换内容在dst字段中
foreach ($list as $v) {
    echo $v['dst']."<br/>";
}
</pre>
        <p>目标语言支持以下种类，为百度官方编码：</p>
<pre>
$Lang = [
    'zh'    => '中文',
    'jp'    => '日语',
    'jpka'  => '日语假名',
    'th'    => '泰语',
    'fra'   => '法语',
    'en'    => '英语',
    'spa'   => '西班牙语',
    'kor'   => '韩语',
    'tr'    => '土耳其语',
    'vie'   => '越南语',
    'ms'    => '马来语',
    'de'    => '德语',
    'ru'    => '俄语',
    'ir'    => '伊朗语',
    'ara'   => '阿拉伯语',
    'est'   => '爱沙尼亚语',
    'be'    => '白俄罗斯语',
    'bul'   => '保加利亚语',
    'hi'    => '印地语',
    'is'    => '冰岛语',
    'pl'    => '波兰语',
    'fa'    => '波斯语',
    'dan'   => '丹麦语',
    'tl'    => '菲律宾语',
    'fin'   => '芬兰语',
    'nl'    => '荷兰语',
    'ca'    => '加泰罗尼亚语',
    'cs'    => '捷克语',
    'hr'    => '克罗地亚语',
    'lv'    => '拉脱维亚语',
    'lt'    => '立陶宛语',
    'rom'   => '罗马尼亚语',
    'af'    => '南非语',
    'no'    => '挪威语',
    'pt_BR' => '巴西语',
    'pt'    => '葡萄牙语',
    'swe'   => '瑞典语',
    'sr'    => '塞尔维亚语',
    'eo'    => '世界语',
    'sk'    => '斯洛伐克语',
    'slo'   => '斯洛文尼亚语',
    'sw'    => '斯瓦希里语',
    'uk'    => '乌克兰语',
    'iw'    => '希伯来语',
    'el'    => '希腊语',
    'hu'    => '匈牙利语',
    'hy'    => '亚美尼亚语',
    'it'    => '意大利语',
    'id'    => '印尼语',
    'sq'    => '阿尔巴尼亚语',
    'am'    => '阿姆哈拉语',
    'as'    => '阿萨姆语',
    'az'    => '阿塞拜疆语',
    'eu'    => '巴斯克语',
    'bn'    => '孟加拉语',
    'bs'    => '波斯尼亚语',
    'gl'    => '加利西亚语',
    'ka'    => '格鲁吉亚语',
    'gu'    => '古吉拉特语',
    'ha'    => '豪萨语',
    'ig'    => '伊博语',
    'iu'    => '因纽特语',
    'ga'    => '爱尔兰语',
    'zu'    => '祖鲁语',
    'kn'    => '卡纳达语',
    'kk'    => '哈萨克语',
    'ky'    => '吉尔吉斯语',
    'lb'    => '卢森堡语',
    'mk'    => '马其顿语',
    'mt'    => '马耳他语',
    'mi'    => '毛利语',
    'mr'    => '马拉提语',
    'ne'    => '尼泊尔语',
    'or'    => '奥利亚语',
    'pa'    => '旁遮普语',
    'qu'    => '凯楚亚语',
    'tn'    => '塞茨瓦纳语',
    'si'    => '僧加罗语',
    'ta'    => '泰米尔语',
    'tt'    => '塔塔尔语',
    'te'    => '泰卢固语',
    'ur'    => '乌尔都语',
    'uz'    => '乌兹别克语',
    'cy'    => '威尔士语',
    'yo'    => '约鲁巴语',
    'yue'   => '粤语',
    'wyw'   => '文言文',
    'cht'   => '中文繁体'
];
</pre>

        <h2 id="jun-手机归属地查询接口">17、手机归属地查询接口</h2>
        <p>该接口主要以CURL爬虫实现，依赖<code>\org\Phone::run(手机号)</code>方法支持。查询失败返回<code>false</code>，成功返回一维数组。具体使用案例如下：</p>
<pre>

# 使用DEMO
$array = \org\Phone::run(15992431788);
dump($array);

返回值说明如下：
mts       ：手机号前7位数
province  ：归属地(省)
catName   : 运营商
carrier   ：归属地运营商
telString ：手机号
</pre>


        <h2 id="jun-居民身份证真实性查询接口">18、居民身份证真实性查询接口</h2>
        <p>该接口主要以CURL爬虫实现，依赖<code>\org\Idcard::run(身份证号)</code>方法支持。查询失败返回<code>false</code>，成功返回一维数组。具体使用案例如下：</p>
<pre>

# 使用DEMO
$array = \org\Idcard::run(身份证号码);
dump($array);

返回值说明如下：
card      ：身份证号码
province  ：归属地(省)
city      ：归属地(市)
area      ：归属地(区)
date      ：出生日期（年月日）
time      ：出生日期（时间戳）
month     : 生日（月）
day       : 生日（日）
sex       ：性别
</pre>

        <h2 id="jun-密码表简单加解密">19、jun-密码表简单加解密</h2>
        <p>该接口主要以字符串替换 + 简单私钥，base加密的方式实现加解密。具体使用案例如下：</p>
<pre>
# 加密
$sign = \org\Encryption::run('xiaoniuniu', 123456);
# 解密
$str  =   \org\Encryption::decrypt($sign, 123456);

参数说明如下：
参数1：加密前 或 加密后的字符串，必填
参数2：加解密私钥，选填
</pre>

        <h2 id="jun-IP省市区地址查询">20、IP省市区地址查询</h2>
        <p>该接口主要以抓取第三方IP实现。具体使用案例如下：</p>
<pre>
# 根据IP查询对应的省市区归属地
$data = \org\Ipcity::run('IP地址');

返回值为一维数组，查询失败返回false，说明如下：
province ：省名称，某位不带省
city ：市名称，某位不带市
area ：区名称，会存在获取不到
flow ：服务供应商，例如电信、移动
</pre>

        <h2 id="jun-文件压缩解压">21、文件压缩解压</h2>
        <p>
            该接口主要用于对指定文件或目录进行压缩打包，或者解压操作。
            其核心参数主要有3个调用方法：
        </p>
<pre>
# 先实例化类，再调用以下三个方法之一
$obj = new \org\Zip();

/**
 * 创建压缩文件
 * @todo 无
 * @author 小黄牛
 * @version v1.1.7 + 2019.03.29
 * @deprecated 暂不弃用
 * @global 无
 * @param string $SavePath 压缩包保存到的路径
 * @param string $Pack 需要打包的目录或文件 
 * @param string $SaveName 压缩包保存的文件名   默认为空,为空时则使用时间戳充当为文件名,禁止使用中文
 * @param string $ZipType 压缩包保存的类型      默认为zip
 * @return bool
*/
public function save_zip($SavePath, $Pakc, $SaveName='', $ZipType='zip') {}

/**
 * 解压文件到指定目录
 * @todo 无
 * @author 小黄牛
 * @version v1.1.7 + 2019.03.29
 * @deprecated 暂不弃用
 * @global 无
 * @param string $src_file zip压缩文件的路径	
 * @param string $dest_dir 解压文件的目的路径	
 * @param bool $overwrite 是否重写已经存在的文件
 * @param bool $type 是否需要删除压缩包	
 * @return bool
*/
public function un_zip($src_file, $dest_dir='', $overwrite=true, $type=false) {}

/**
 * 输出压缩包下载
 * @todo 无
 * @author 小黄牛
 * @version v1.1.7 + 2019.03.29
 * @deprecated 暂不弃用
 * @global 无
 * @param string $url 下载文件地址
 * @return void
*/
public function dow_zip($url) {}
</pre>
        <p>注意，该类在使用时，所填入的目录相关参数，都建议使用绝对路径，否则容易发生错误。</p>


        <h2 id="jun-过滤敏感词">1、过滤敏感词</h2>
        <p>
            有效域：全局共用<br/>
            介绍：主要关联后端的敏感词库，用于对字符串进行敏感词识别过滤。<br/>
            详细介绍如下：
        </p>
<pre>
/**
 * 过滤敏感词
 * @todo 无
 * @author 小黄牛
 * @version v1.2.1 + 2019.04.02
 * @deprecated 暂不弃用
 * @global 无
 * @param string $str 需要被过滤的字符串
 * @return array['code'=>'bool', 'msg'=>'包含的敏感词']
*/
function vif_sensitive($str=null) {

}
</pre>


        <!--后台前端JS文档-->
        <h2 id="jun-弹窗提示">1、弹窗提示</h2>
<p><pre>
$.thinkmimi({Content : '提示内容', Type:2, Align:'right', OutTime:2000});

其中：
Content ：提示内容
Type    ：弹窗类型 1|2 正确|错误
Align   ：弹窗位置 right|center 右侧|居中
OutTime ：弹窗自动关闭秒数
</pre></p>

        <h2 id="jun-新窗口弹出页面">2、新窗口弹出页面</h2>
<p><pre>
JunAMS是使用的layui前端框架，
弹出新窗口主要依赖于layui.open组件。
在弹窗出的页面中，需要新建一个<code>doSubimt()</code>函数，用作返回值。

例如：我们在Index.html中利用如下代码，弹出Add.html页面：
layer.open({
    type: 2,
    title: '添加新管理员',
    shadeClose: true,
    shade: false,
    maxmin: true,
    area: ['100%', '100%'],
    btn: ['确认', '取消'],
    content: href,
    yes: function(index, layero) {
        var _this = layero.find('iframe')[0];
        var bool  = _this.contentWindow.doSubimt();
        if (bool !== false) {
            $.thinkmimi({Content : bool['msg'],Type : 1,Align:'right',OutTime:2000,});
            menu_run();
            layer.closeAll();
            window.setTimeout(function(){
                window.location.reload();
            }, 700);
        }
    },
});

那么，我们在Add.html页面中就需要新建一个doSubimt()函数，用作返回值。
function doSubimt() {
	var res;
	var data = {};
	
	$.ajax({
		type: 'post',
		data: data,
		async: false,
		url: "{:url('add')}",
		success: function(data) {
			var array = eval('('+data+')');
			res = array;
			if (array['code'] == '01') {
				$.thinkmimi({Content : array['msg'], Type:2, Align:'right', OutTime:2000});
				res = false;
			}
		}
	});

	return res;
}
</pre></p>



        <h2 id="jun-更新日程">更新日程</h2>
        <p>1、2018-09-30 开发者：小黄牛</p>
        <p>2、2018-10-09 开发者：小黄牛</p>
        <p>3、2018-10-10 开发者：小黄牛</p>
        <p>4、2018-10-12 开发者：小黄牛</p>
        <p>5、2018-10-12 开发者：小黄牛</p>
        <p>6、2018-10-16 开发者：小黄牛</p>
        <p>7、2018-10-18 开发者：小黄牛</p>
        <p>8、2018-11-23 开发者：小黄牛</p>
        <p>9、2018-12-03 开发者：小黄牛</p>
        <p>10、2018-12-21 开发者：小黄牛</p>
        <p>11、2018-12-24 开发者：小黄牛</p>
        <p>12、2019-03-15 开发者：小黄牛</p>
        <p>13、2019-03-18 开发者：小黄牛</p>
        <p>14、2019-03-22 开发者：小黄牛</p>
        <p>15、2019-03-26 开发者：小黄牛</p>
        <p>16、2019-03-28 开发者：小黄牛</p>
        <p>17、2019-03-29 开发者：小黄牛</p>
        <p>18、2019-04-01 开发者：小黄牛</p>
        <p>19、2019-04-03 开发者：小黄牛、宣言、默许、水云霜</p>

        <h2 id="jun-注意事项">注意事项</h2>
        <p class="tip">
            为了兼容linux系统的日常写入修改删除操作，以下目录与文件均需要手动设置<code>0777</code>权限，否则将报错。
        </p>
<pre>
/index.php                                    用于CMS模块切换项目绑定
/application/                                 用于安装写入数据库配置文件，与创建项目模块
/runtime/                                     用于日常thinkphp框架的缓存日志
/extend/weixin/access_token.json              用于记录微信的token
/extend/weixin/ssl_path/apiclient_cert.pem    用于修改微信支付接口的证书
/extend/weixin/ssl_path/apiclient_key.pem     用于修改微信支付接口的证书
/public/cms/                                  用于CMS模块的静态文件管理
/public/edit/                                 用于保存后台上传文件
/public/txt/                                  用于保存CMD模块与模型特殊模块的配置文件
/public/weixin_log/                           用于保存微信接口的日志文件
/public/install.sql                           JunAMS安装的数据库文件
</pre>


        <h2 id="jun-文件以及目录说明">文件以及目录说明</h2>
<p><pre>
WEB部署目录
├─index.php       前端PHP入口文件
├─admin.php       后台PHP入口文件
├─html            前端静态文件存放目录
├─extend          第三方接口封装目录  
│   ├─org         零散的第三方接口类文件存放目录
│   │  ├─Idcard.php      身份证真实性验证类
│   │  ├─Phone.php       手机归属地获取类
│   │  ├─Fanyi.php       百度翻译获取类
│   │  ├─Cpu.php         服务器信息获取类
│   │  ├─Indexes.php     网站收录量查询类
│   │  ├─Iswx.php        检测微信浏览器是否屏蔽域名类
│   │  ├─Bom.php         BOM头检测清除类
│   │  ├─Fileroot.php    Class注释生成文档类
│   │  ├─Encryption.php  简单加解密类
│   │  ├─Ipcity.php      IP地址查询省市区类
│   │  ├─Zip.php         压缩解压类
│   │  └─Baksql.php      数据库操作类，用于后台拉取数据库表详情
│   ├─cmd              CMD工具指令分流存放目录
│   ├─oauth2           第三方登录接口存放目录
│   │  ├─Oauth         基类分支处理目录
│   │  │    ├─Basics.php        基类接口
│   │  │    ├─Weibo.php         微博登录
│   │  │    ├─Github.php        Github登录
│   │  │    ├─Shenniu.php       神牛教登录
│   │  │    └─Baidu.php         百度登录
│   │  └─Oauth2.php             聚合登录调用类
│   ├─kuaidi           快递查询类文件存放目录
│   │  ├─Kuaidi        快递查询类文件存放目录
│   │  │    ├─Kdcx.php          kdcx.cn接口
│   │  │    └─Kd100.php         快递100接口
│   │  └─Express.php            快递查询调用类
│   ├─weixin           微信开发类文件存放目录
│   │  ├─ssl_path      微信支付证书存放目录
│   │  ├─lib           微信官方SDK存放目录(代码已经过二次修改，不支持直接覆盖升级)
│   │  ├─Weixin        微信SDK局部静态配置文件存放目录
│   │  │    └─Wxconfig.php      所有微信相关API请求地址配置文件存放文件
│   │  ├─access_token.json      普通AccessToken缓存文件
│   │  └─Weixin.php             微信开发调用类
│   ├─sms         短信发送类文件存放目录
│   │  ├─Alidayu.php   阿里大鱼短信SDK封装
│   │  ├─Miaodi.php    秒嘀短信SDK封装
│   │  └─Sms.php       短信发送调用类
│   ├─qiniu            七牛云OSS类文件存放目录
│   │  ├─Qiniu         七牛云官方SDK(改动了命名空间)
│   │  └─Qiniu.php     七牛云调用类
│   └─mail       邮件发送类文件存放目录
│      ├─mail          Phpmailer第三方类目录
│      └─Email.php     邮件发送调用类
│
├─public          静态文件存放地址
│   ├─admin       后台静态样式文件存放目录
│   ├─home        前端静态样式文件存放目录
│   ├─edit        layui编辑器文件上传存放目录
│   ├─cms         CMS模块静态文件存放目录
│   │  ├─decompose  项目导入时存放临时文件
│   │  ├─logo       存放项目logo
│   │  ├─zip        存放项目导出压缩包
│   │  └─ready      项目导出时存放临时文件
│   │     ├─code        存放项目对应的PHP文件
│   │     ├─logo        存放项目logo文件
│   │     ├─static      存放项目对应的静态文件
│   │     ├─add.sql     存放项目相关的SQL数据
│   │     └─prefix.txt  存放项目导出时的数据库前缀
│   │  
│   ├─weixin_log  微信API日志文件存放目录
│   ├─txt         文件配置文件存放目录
│   ├─install.php JunAMS安装文件
│   └─install.sql JunAMS安装数据库文件
│          
└─application            后端程序应用目录
    ├─database.php       数据库配置文件
    ├─config.php         项目公共配置文件
    ├─common.php         项目公共函数库
    │  
    ├─common             中间件存放目录
    │    ├─tag           CMS自定义标签存放目录
    │    │  └─Ams.php    list标签
    │    ├─controller    全站中间件存放位置
    │    │     ├─Main.php    前端中间件    
    │    │     └─Backend.php 后台中间件
    │    └─view          跳转模板文件
    │       └─Tpl
    │          └─ip_end.html  检测到被封禁IP时候显示的404模板
    │  
    ├─index              前端
    │  ├─config.php      独立配置文件
    │  ├─common.php      独立函数库
    │  │
    │  └─controller      接口控制器存放目录
    │
    └─admin              后台程序文件存放目录
         ├─config.php    独立配置文件
         ├─common.php    独立函数库
         │  
         ├─controller    后台控制器存放目录
         │     ├─Actionlog.php        管理员操作日志管理
         │     ├─Article.php          CMS模块 - 内容管理
         │     ├─Cmd.php              CMD工具
         │     ├─Common.php           后台通用公共方法
         │     ├─Codefile.php         CMS模块 - 代码管理
         │     ├─Column.php           CMS模块 - 栏目管理
         │     ├─Content.php          CMS模块 - ILDM管理
         │     ├─Database.php         数据库 - 服务器管理
         │     ├─Deploy.php           全站API参数管理
         │     ├─Docroot.php          文档管理
         │     ├─Edition.php          版本管理
         │     ├─Field.php            CMS模块 - 字段管理
         │     ├─Index.php            主页
         │     ├─Item.php             CMS模块 - 项目相关
         │     ├─Job.php              岗位管理
         │     ├─Login.php            登录
         │     ├─Loginlog.php         管理登录日志管理
         │     ├─Logtype.php          日志编码管理
         │     ├─Manager.php          管理员管理
         │     ├─Menu.php             权限菜单管理
         │     ├─Model.php            CMS模块 - 模型管理
         │     ├─Notice.php           维护公告管理
         │     ├─Region.php           地区管理
         │     ├─Role.php             角色管理
         │     ├─Security.php         安全管理
         │     ├─Structure.php        部门管理
         │     └─Weixin.php           微信开发内容管理
         │ 
         └─view          后台视图文件存放目录(参考控制器命名)      
</pre></p>

    </div>

</div>   


      </div>
     </div>
    </div>
   </div>
  </div>
 </div>
</div>